From 52da82dbd60e024458d4c345692577efb6e8a8a3 Mon Sep 17 00:00:00 2001 From: "rminnich@lanl.gov[iap10]" Date: Thu, 3 Mar 2005 16:07:46 +0000 Subject: [PATCH] bitkeeper revision 1.1159.258.19 (42273652yPWGOWH6C8w45TOchk7Jog) This patch enables argument passing to plan 9 domains, so that users can now have parameters for things like Venti etc. Signed-off-by: ron minnich Signed-off-by: ian.pratt@cl.cam.ac.uk --- BitKeeper/etc/logging_ok | 1 + tools/libxc/xc_plan9_build.c | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 44556798fe..d1c20d6e5f 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -46,6 +46,7 @@ mwilli2@equilibrium.research.intel-research.net mwilli2@pug.(none) rac61@labyrinth.cl.cam.ac.uk rgr22@boulderdash.cl.cam.ac.uk +rminnich@lanl.gov rn@wyvis.camb.intel-research.net rn@wyvis.research.intel-research.net rneugeba@wyvis.research diff --git a/tools/libxc/xc_plan9_build.c b/tools/libxc/xc_plan9_build.c index 33c9a54914..fc67a293ea 100755 --- a/tools/libxc/xc_plan9_build.c +++ b/tools/libxc/xc_plan9_build.c @@ -125,7 +125,8 @@ static int unsigned long tot_pages, unsigned long *virt_load_addr, unsigned long *ksize, unsigned long *symtab_addr, unsigned long *symtab_len, - unsigned long *first_data_page, unsigned long *pdb_page); + unsigned long *first_data_page, unsigned long *pdb_page, + const char *cmdline); #define P9ROUND (P9SIZE / 8) @@ -230,7 +231,7 @@ setup_guestos(int xc_handle, if (loadp9image(kernel_gfd, xc_handle, dom, cpage_array, tot_pages, virt_load_addr, &ksize, &symtab_addr, &symtab_len, - &first_data_page, &first_page_after_kernel)) + &first_data_page, &first_page_after_kernel, cmdline)) goto error_out; DPRINTF(("First data page is 0x%lx\n", first_data_page)); DPRINTF(("First page after kernel is 0x%lx\n", @@ -623,7 +624,7 @@ xc_plan9_build(int xc_handle, * Plan 9 memory layout (initial) * ---------------- * | info from xen| @0 - * ---------------- + * ---------------|<--- boot args (start at 0x1200 + 64) * | stack | * ----------------<--- page 2 * | empty | @@ -658,7 +659,8 @@ loadp9image(gzFile kernel_gfd, int xc_handle, u32 dom, unsigned long tot_pages, unsigned long *virt_load_addr, unsigned long *ksize, unsigned long *symtab_addr, unsigned long *symtab_len, - unsigned long *first_data_page, unsigned long *pdb_page) + unsigned long *first_data_page, unsigned long *pdb_page, + const char *cmdline) { unsigned long datapage; Exec ehdr; @@ -669,6 +671,7 @@ loadp9image(gzFile kernel_gfd, int xc_handle, u32 dom, PAGE *image = 0; unsigned long image_tot_pages = 0; unsigned long textround; + static PAGE args; ret = -1; @@ -736,6 +739,16 @@ loadp9image(gzFile kernel_gfd, int xc_handle, u32 dom, image, image_tot_pages * 4096, page_array, 0x100); DPRINTF(("done copying kernel to guest memory\n")); + /* now do the bootargs */ + /* in plan 9, the x=y bootargs start at 0x1200 + 64 in real memory */ + /* we'll copy to page 1, so we offset into the page struct at + * 0x200 + 64 + */ + memset(&args, 0, sizeof(args)); + memcpy(&args.data[0x200 + 64], cmdline, strlen(cmdline)); + printf("Copied :%s: to page for args\n", cmdline); + ret = memcpy_toguest(xc_handle, dom, &args, sizeof(args), page_array,1); + dumpit(xc_handle, dom, 0 /*0x100000>>12*/, 4, page_array) ; out: if (image) free(image); -- 2.30.2